const express=require('express');
const mongodb=require('./model/packaging.js');
const body=require('body-parser');
const session=require('express-session');
const cookie=require('cookie-parser');
const fs=require('fs');
const path=require('path');
const app=express();
const http=require('http').Server(app);//引入http
const io=require('socket.io')(http);//引入时时通信，
const fileupload=require('express-fileupload');//引入文件阅读器
const ejs=require('ejs');//引入模板引擎
app.use(body.urlencoded({extended:true}))//配置body-parser;
app.use(cookie());
app.use(fileupload());
app.set('view engine','ejs');//配置ejs;
// express中是把session信息存储在内存中
// 配置session
app.use(session({
    secret:"abc", //设置签名秘钥 内容可以任意填写
    cookie:{ maxAge:60*60*24*30*1000 }, //设置cookie的过期时间，例：80s后    session和相应的cookie失效过期
    resave:true, //强制保存，如果session没有被修改也要重新保存
    saveUninitialized:false //如果原先没有session那么久设置，否则不设置
}))
app.use(express.static('public/reception'));
app.use(express.static('public/manage'));

app.all('*', function (req, res, next) {
    res.header('Access-Control-Allow-Origin', '*');
    //Access-Control-Allow-Headers ,可根据浏览器的F12查看,把对应的粘贴在这里就行
    res.header('Access-Control-Allow-Headers', 'Content-Type');
    res.header('Access-Control-Allow-Methods', '*');
    res.header('Content-Type', 'application/json;charset=utf-8');
    next();
    });
//登陆
var arr={
	"number":"1000",
}
arr=JSON.stringify(arr);
fs.readFile('./number.json',(err,f)=>{
	if(err){
        fs.writeFile('./number.json',arr,(err)=>{
			if(err) throw err;
		})
	}
})
//注册
app.use('/register',(req,res)=>{
	// console.log(req.query);
	mongodb.find('canteen','Administrator',{name:req.query.name},(a)=>{
		console.log('calian链接到注册');
		//如果返回数据长度等于零，说明没有数据，需要注册
		if(a.length==0){
			var obj={
				name:req.query.name,
				password:req.query.password,
			}
			mongodb.insert('canteen','Administrator',obj,(b)=>{
			    res.send('注册成功');	
			})
		}else{
			res.send('用户名已存在');
		}
	})
})
//登陆
app.use('/login',(req,res)=>{
	var obj={
		name:req.query.name,
		password:req.query.password,
	}
	console.log(obj);
	mongodb.find('canteen','Administrator',{name:req.query.name},(a)=>{
	    // console.log(a);
		if(a.length==0){
	    	res.send('请注册');
	    }else if(obj.password==a[0].password){
			console.log('密码正确执行');
	    	let name=a[0].name;
	    	req.session.name=req.query.name;
	         res.send('密码正确');
	    }else{
			console.log('密码错误执行');
	    	res.send('false');
	    }
	})
})
//退出登录
app.use('/prep',(req,res)=>{
	// console.kog(req.query)
	res.send('退出成功');
})
//注销账号
app.use('/logout',(req,res)=>{
    var obj=req.query;
	mongodb.del('canteen','Administrator',obj,(a)=>{
	})
	res.send('注销成功');
	// console.log('已注销');
})
//接收上传的菜品-图片
app.use('/submitTheDishes',(req,res)=>{
	console.log(req.files);
	let img=req.files.img;
	let name=img.name;
	//mv是一个函数设置保存路径
	let paths=__dirname+'/public/reception/img/'+name;
	img.mv(paths);
	res.send('接收到了');
})
//接收上传的菜品-信息
app.use('/submitTheDishes-data',(req,res)=>{
	// console.log(req.query);
	mongodb.find('canteen','dishes',{title:req.query.title},(a)=>{
		// console.log(a);
		if(a.length==0){
			mongodb.insert('canteen','dishes',req.query,(b)=>{
				io.emit('getalldish',b);
				 res.send(b);
			 })	
		}else{
			res.send('已有菜品');
		}
	})
})
//删除菜品信息
app.use('/delDishes',(req,res)=>{
	// console.log(req.query);
	mongodb.del('canteen','dishes',req.query,(b)=>{
		res.send('删除成功');
	})
});
//菜品信息获取
app.use('/getDishes',(req,res)=>{
	mongodb.findAll('canteen','dishes',(a)=>{
		res.send(a);
		// console.log(a);
	})
})
//接收前台订单消息
app.use('/issueorder',(req,res)=>{
	// console.log('订单提交');
	console.log(req.query);
	//获取旧订单信息
	fs.readFile('./number.json',(err,f)=>{
		if(err) throw err;
		var f=JSON.parse(f);
		var order=parseInt(f.number);
		order++;
		req.query.number=order;
		var obj={
			"number":`${order}`,
		}
		//设置新订单信息
		obj=JSON.stringify(obj);
		fs.writeFile('./number.json',obj,(err)=>{
			if(err) throw err;
		});
		mongodb.insert('canteen','order',req.query,(a)=>{
			mongodb.find('canteen','order',req.query,(b)=>{
				// var temp=b[0];
				// //在每次上传的订单里过滤出，{销量，菜系，金额}
				// //菜名分类查找
				// var name={
				// 	"name":"classify",
				// }
				// //菜系分类查找
				// var department={
				// 	"department":"classify",
				// }
				// // 销售量的菜名分类
				// mongodb.find('canteen','order',{"name":"classify"},(c)=>{
				//     //如果还没有菜名分类总计，那么生成菜名分类总计
				// 	console.log(c);
				// 	if(c.length<1){
				// 		//先把菜名提取出来，然后累加相同菜名的数据
				// 		var title=[];
				// 		for(var i=0;i<temp.data.length;i++){
				// 			//如果是字符串就转成对象；
				// 			if(typeof temp.data[i]=='string'){
    //                             temp.data[i]=JSON.parse(temp.data[i]);								
				// 			}
				// 			let obj=temp.data[0];
				// 			title.push(obj.title);
				// 		}
				// 		//title去重
				// 		title=[...title];
				// 		name.data=[];
				// 	    for(var i=0;i<title.length;i++){
				// 			let obj={
				// 				title:'',
				// 				sum:0,
				// 				price:0,
				// 			};
				// 			for(var k=0;k<temp.data.length;k++){
				// 				//如果是同名的菜,添加数据
				// 				if(title[i]==temp.data[k].title){
				// 					obj.title=title[i];
				// 					obj.price=temp.data[k].price;
				// 					obj.sum=temp.data[k].sum;
				// 				}
				// 				name.data.push(obj);
				// 			}
				// 		}
				// 		name.allprice=temp.allprice;
				// 		//更新数据；
				// 		mongodb.update('canteen','order',c[0],name,d=>{
				// 				io.emit('sales_si',name);
				// 		})
				// 	}else{
				// 		//如果已有数据直接添加；已有的增加属性值，没有的增加属性；
				// 		let obj=JSON.parse(JSON.stringify(c[0]));//是已有的数据
				// 		console.log(obj);
				// 		let arr=[];//我应该使用一个空的数组保存，对象中没有的数据。避免多次循环；造成数据重叠；
				// 		//总的价格
				// 		var allprice=parseFloat(obj.allprice);
				// 		obj.allprice=allprice+parseFloat(temp.allprice);
				// 		//循环已有对象的数据
				// 		for(var i=0;i<obj.data.length;i++){
				// 			if(typeof obj.data[i]=='string'){
				// 				obj.data[i]=JSON.parse(obj.data[i]);
				// 			}
				// 			var objs={
				// 				title:'',
				// 			    sum:0,
				// 				price:0,
				// 			};//用于收集没有的数据；
				// 			//循环新增对象数据
				// 			for(var k=0;k<temp.data.length;k++){
				// 				if(typeof temp.data[k]=='string'){
				// 					temp.data[k]=JSON.parse(temp.data[k]);
				// 				}
				// 				//如果菜品名是已有的那么把他的值相加；
				// 				if(obj.data[i].title==temp.data[k].title){
				// 					obj.data[i].sum=parseInt(obj.data[i].sum)+parseInt(temp.data[k].sum);
				// 					obj.data[i].price=parseInt(obj.data[i].price)+parseInt(temp.data[k].price);
				// 				}else{
				// 						objs.title=obj.data[i].title;
				// 						objs.price=temp.data[k].price;
				// 						objs.sum=temp.data[k].sum;
									
				// 				}
				// 			}
				// 			if(objs.title){
				// 				arr.push(JSON.parse(JSON.stringify(objs)));
				// 			}		
				// 		}
				// 		//在将新的数组和旧的数组合并
				// 		if(arr.length>0){
				// 			obj.data=obj.data.concat(arr);
				// 		}
				// 		console.log(c);
				// 		console.log(obj);
				// 		mongodb.update('canteen','order',c[0],obj,d=>{
				// 				io.emit('sales_si',obj);
				// 				console.log(obj);
				// 		})
				// 	}
					
				// })
				io.emit('rceciveorder',b[0]);
				res.send(b[0]);
			})
		})
	})	
});
//前台获取菜品信息,可以和中台获取信息写成一个；
app.use('/getalldish',(req,res)=>{
	mongodb.findAll('canteen','dishes',(a)=>{
		io.emit('getalldish',a);
		res.send(a);
	})
})
//中台进入获取订单消息
app.use('/rceciveorder',(req,res)=>{
	mongodb.findAll('canteen','order',(a)=>{
		let len=a.length;
		let skip=len-20;
		if(skip<0){
			skip=0;
		}
		mongodb.findAll('canteen','order',(b)=>{
			// console.log(b)
			io.emit('rceciveorder',b);
			res.send('true');
		},skip,20);
	})
})
//实时通信，connection 事件，接收数据；
io.on('connection',(socket)=>{
	socket.on('login',(data)=>{
		// console.log(data);
		// console.log('不难');
		io.emit('bu','不难');
	});
	socket.on('news',(data)=>{ 
		//将房间号提取出来，根据房间号发送消息
		var number=data.number;
		io.emit(`${number}`,data);
	    // console.log(data);
		//所有的消息存在news集合中通过订单号识别；
		mongodb.insert('canteen','news',data,(a)=>{
		});
	});
	//进入订单房间获取该房间所有消息
	socket.on('all-news',(number)=>{
		//data。是传过来的房间号
		var obj={
			"number":parseInt(number),
		};
		mongodb.find('canteen','news',obj,(a)=>{
			// console.log(a);
		    io.emit(`${number}+s`,a);
			// console.log(obj);
		});
	});
	//中台获取订单消息,只获取前20条；
	// console.log('获取到');//没有获取到；
	socket.on('rceciveorder',(data)=>{
		// console.log(data);
		if(data==='获取已有订单信息'){
			// console.log('获取到');
			mongodb.findAll('canteen','order',(a)=>{
				let len=a.length;
				let skip=len-20;
				if(skip<0){
					skip=0;
				}
				mongodb.findAll('canteen','order',(b)=>{
					// console.log(b)
					io.emit('rceciveorder',b);
					// res.send(b);
				},skip,20);
			})
		}
	})
	
})
//我需要两条数据，一条是当前背景图片。另一条是所有背景图片；前——中台分开设置；
//单独建立集合的话只需要，获取所有就可以了；
//更换前台背景
app.use('/qs_bag',(req,res)=>{
	// console.log(req.files);
	var img=req.files.img;
	var name=img.name;
	let paths=__dirname+'/public/reception/img/'+name;
	// console.log(paths);
	img.mv(paths);
	var obj={
		path:`../img/${name}`
	}
	// console.log('前台保存');
	mongodb.find('canteen','q_img_bg',obj,c=>{
		// console.log(c);
		if(c.length<1){
			mongodb.insert('canteen','q_img_bg',obj,(a)=>{})
		}
		//前台背景数据；
		var imgs={
			place:'前台',
			path:`../img/${name}`,
		}
		//查找原有数据，如果没有就插入，如果没有就更新，完事以后把这条数据发送到前台；
		mongodb.find('canteen','img_bg',{place:'前台'},(data)=>{
			if(data.length<1){
				//插入
				mongodb.insert('canteen','img_bg',imgs,(res)=>{
				})
				// console.log(imgs);
				io.emit('qs_bag',obj.path);
			}else{
				//更新
			
				mongodb.update('canteen','img_bg',data[0],imgs,(res)=>{
				})
				// console.log(imgs);
				io.emit('qs_bag',obj.path);	
			}
		})
		res.send('');
	})
});
//为了避免一个函数体积太大，如果只上穿url,和上传图片分开写
app.use('/qs_bag_url',(req,res)=>{
	console.log(req.query);
	//需要将背景集合·里的数据更新
	//方法取出来在加工一下，然后更新
	mongodb.find('canteen','img_bg',{place:'前台'},(a)=>{
		//字段是不可更新的所以，要重新写一个对象；
		var obj={
			place:'前台',
			path:req.query.path
		}
		//修该完更新回去
		mongodb.update('canteen','img_bg',a[0],obj,res=>{});
		console.log('更新完毕--0');
		io.emit('qs_bag',obj.path);	
		res.send('');
	})
});
//获取曾经设置过的前台背景图片
app.use('/q_bag',(req,res)=>{
	mongodb.findAll('canteen','q_img_bg',(a)=>{
		if(a.length<1){
			res.send('');
		}else{
			res.send(a);
		}
	})
})
//更换中台背景
app.use('/zs_bag',(req,res)=>{
	var img=req.files.img;
	var name=img.name;
	let paths=__dirname+'/public/manage/img/'+name;
	console.log(paths);
	img.mv(paths);
	var obj={
		path:`../img/${name}`,
	}
		console.log('中台保存');
	mongodb.find('canteen','z_img_bg',obj,c=>{
		if(c.length<1){
			mongodb.insert('canteen','z_img_bg',obj,(a)=>{})
		}
		var imgs={
			place:'中台',
			path:`../img/${name}`,
		}
		//查找原有数据，如果没有就插入，如果没有就更新，完事以后把这条数据发送到前台；
		mongodb.find('canteen','img_bg',{place:'中台'},(data)=>{
			if(data.length<1){
				//插入
				mongodb.insert('canteen','img_bg',imgs,(res)=>{
				})
				io.emit('zs_bag',obj.path);
				console.log('发送了');
			}else{
				//更新
				mongodb.update('canteen','img_bg',data[0],imgs,(res)=>{
				})
				console.log('发送了')
				io.emit('zs_bag',obj.path);	
			}
		})
		res.send('');
	})
	
});
//上传url
app.use('/zs_bag_url',(req,res)=>{
	var url=req.query;
	mongodb.find('canteen','img_bg',{place:'中台'},(a)=>{
	    var obj={
	    	place:'中台',
	    	path:req.query.path
	    }
		mongodb.update('canteen','img_bg',a[0],obj,res=>{});
		console.log('更新完毕--1');
		io.emit('zs_bag',obj.path);
		res.send('');
	})
});
//获取曾经设置过的中台背景图片
app.use('/z_bag',(req,res)=>{
	mongodb.findAll('canteen','z_img_bg',(a)=>{
		if(a.length<1){
			res.send('');
		}else{
			res.send(a);
		}
	})
});
//上面已经，完成了背景图片的上传和设置，现在需要设置初始，加载时就获取上面设置好的图片；
//初始加载获取前台背景；
app.use('/get_q_bag',(req,res)=>{
	mongodb.find('canteen','img_bg',{place:'前台'},(a)=>{
		if(a.length<1){
			res.send('没有图片');
		}else{
			res.send(a[0]);
			console.log(a[0]);
		}
	});
});
//初始加载获取中台背景；
app.use('/get_z_bag',(req,res)=>{
	mongodb.find('canteen','img_bg',{place:'中台'},(a)=>{
		if(a.length<1){
			res.send('没有图片');
		}else{
			console.log(a[0])
			res.send(a[0]);
		}
	})
});
//菜品状态
app.use('/updateorder',(req,res)=>{
	res.send('');
})
//菜名分类销售情况
app.use('/sales_si',(req,res)=>{
	mongodb.findAll('canteen','order',(a)=>{
		var temp=[];
		for(var i=0;i<a.length;i++){			
		}
	})
	
	res.send('');
})
//菜系分类销售情况
app.use('/sales_style',(req,res)=>{
	res.send('');
})
http.listen('9000');